import { createStore } from "vuex";
import createPersistedState from "vuex-persistedstate";

import {routes} from "@/router"
//const username=localStorage.getItem("username")


//定义一个方法  过滤当前用户有权限的路由集合
//routes 路由规则表数据  roles 当前用户的权限集合
function filterRoutes(routes,roles){
    //最终返回的结果
    let result =[]
    routes.forEach((route)=>{
        //避免修改原数据，进行拷贝
        const tmp={...route}
        if(roles.includes(tmp.name)){
            //如果权限中包含数据的name，判断是否有子集
            if(tmp.children){
                tmp.children=filterRoutes(tmp.children,roles)
            }
            result.push(tmp)
        }
    })
    return result
}

const store =createStore({
    state:{
        //用户信息
        //username:username ||"",
        username:"",
        //页面权限
        pageRoles:[],
        //当前用户角色 1-管理员 2-超级管理员
        role:""
    },
    getters:{
        //当前用户有权限访问的路由页面routes
        permissionRoutes(state){
            const arr=routes.filter((item)=>{
                return !item.hidden
            })
            if(state.role===2){
                //超级管理员默认拥有所有权限
                return arr
            }else{
                //普通用户
                return filterRoutes(arr,state.pageRoles)
            }
            
        }
    },
    mutations:{
        setUserName(state,username){
            state.username=username
            //localStorage.setItem("username",username)
        },
        
        setState(state,payload){
            //登陆之后返回的一大坨对象直接传给payload
            state.username=payload.adminname
            state.pageRoles=payload.checkedkeys
            state.role=payload.role
        }
    },
    //默认把所有数据存起来-----localStoage
    plugins: [createPersistedState({
        //额外配置
        //指定本地存储使用什么，默认是window.localStorage
        /* storage:window.sessionStorage,

        reducer:(state)=>{
            return {
                key:value,
                //指定存什么字段,key可以随便取名字
                username:state.username
            }
        } */
    })],
})

export default store